#pragma once

#include "base.h"
#include <vector>

typedef struct _MODULE_INFO
{
    PVOID DllBase;
    PVOID EntryPoint;
    ULONG SizeOfImage;
    TCHAR DosFullName[MAX_PATH];
    TCHAR NtFullName[MAX_PATH];
}MODULE_INFO, *PMODULE_INFO;

typedef std::vector<MODULE_INFO> MODULE_LIST;

class CSystemMod :
    public CBase
{
public:
    CSystemMod(void);
    CSystemMod(HANDLE hDriver);
    virtual ~CSystemMod(void);

private:
    MODULE_LIST m_ModuleList;
public:
    BOOL QuerySystemModuleInfoList();

    PMODULE_INFO
    GetModuleInfoAt(
        ULONG Index
    );
    ULONG
    GetModuleCounts(
        VOID
    );
    BOOL
    ShowModuleInfo(
        VOID
    );
    MODULE_LIST&
    GetSystemModuleInfo(
        VOID
    );
};

